package TestDemo;


//<>可以放多个参数，后面的传参也对应传几个
class Myarray <T extends Number>{   // extends Number （规定泛型上界）现在<>只接收Number及其子类的参数
    public T[] array = (T[])new Object[10]; //不能new T 数组 只能是Object
    //在编译的时候会将T擦除为Object 【擦除机制】，运行的时候就没有泛型的说法了，编译就全处理了
    //如果直接把Object类型的转给一个数据类型的话会报错 不安全，Object类型里可以放各种类型的数据，多对少 可能数据丢失
    public T getPos(int pos){
        return this.array[pos];
    }

    public void setVal(int pos, T val){
        this.array[pos] = val;
    }
}
public class Test {

    public static void main1(String[] args) { //这个Integer可以不写
        Myarray<Integer> myarray = new Myarray<Integer>(); //定义一个整形类型数组
        // 指定数据类型【引用类型，不能是简单类型】作为参数
        myarray.setVal(0,10);
        myarray.setVal(1,12);
        //取元素的时候就不用 强转了
        int ret = myarray.getPos(0);
        System.out.println(ret);

        //Myarray<String> myarray2 = new Myarray<>(); //定义一个String类型数组
    }
}